package com.run2code.log.function;

import com.run2code.log.handler.CustomFunctionFactory;
import com.run2code.log.handler.ICustomFunctionService;

/**
 * 自定义函数的默认实现，增加一层是为了屏蔽底层与上层直接接触（也就是说这个类是给组件内部玩的）
 * 日志组件都操作IFunctionService的基础服务对象
 * 关注公众号【奔跑的码畜】，一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/10/13
 */
public class DefaultFunctionHandler implements IFunctionService {

    private final CustomFunctionFactory customFunctionFactory;

    public DefaultFunctionHandler(CustomFunctionFactory customFunctionFactory) {
        this.customFunctionFactory = customFunctionFactory;
    }

    @Override
    public String apply(String functionName, Object value) {
        ICustomFunctionService function = customFunctionFactory.getFunction(functionName);
        if (function == null) {
            return value.toString();
        }
        return function.apply(value);
    }

    @Override
    public boolean executeBefore(String functionName) {
        ICustomFunctionService function = customFunctionFactory.getFunction(functionName);
        return function != null && function.executeBefore();
    }
}
